import request from '@/utils/request'

// ==================== 教师端接口 ====================

// 查询当前教师的题目列表
export function listTeacherTopic(query) {
  return request({
    url: '/system/topic/list',
    method: 'get',
    params: query
  })
}

// 查询题目详情（教师端）
// 注意：返回的数据会包含pending字段（如果有待审核的修改）
export function getTeacherTopic(topicId) {
  return request({
    url: '/system/topic/' + topicId,
    method: 'get'
  })
}

// 新增题目
export function addTopic(data) {
  return request({
    url: '/system/topic',
    method: 'post',
    data: data
  })
}

// 修改题目
// 注意：对于"已通过"状态的题目，修改将提交审核申请（变为"修改待审核"状态）
// 其他状态的题目可以直接修改
export function updateTopic(data) {
  return request({
    url: '/system/topic',
    method: 'put',
    data: data
  })
}

// 删除题目
export function delTopic(topicIds) {
  return request({
    url: '/system/topic/' + topicIds,
    method: 'delete'
  })
}

// 导出题目
export function exportTopic(query) {
  return request({
    url: '/system/topic/export',
    method: 'post',
    params: query
  })
}

// ==================== 管理员端接口 ====================

// 查询所有题目列表（管理员端）
// 注意：返回的数据会包含pending字段，用于审核时对比修改内容
export function listAllTopic(query) {
  return request({
    url: '/system/topic/all',
    method: 'get',
    params: query
  })
}

// 审批通过题目
// 注意：如果是"修改待审核"状态，通过后会将pending字段的内容应用到正式字段
export function approveTopic(topicId) {
  return request({
    url: '/system/topic/approve/' + topicId,
    method: 'put'
  })
}

// 审批拒绝题目
// 注意：如果是"修改待审核"状态，拒绝后会清空pending字段，恢复为"已通过"状态
export function rejectTopic(topicId, auditOpinion) {
  return request({
    url: '/system/topic/reject/' + topicId,
    method: 'put',
    data: { auditOpinion }
  })
}

// ==================== 学生端接口 ====================

// 查询已审核通过的题目列表（学生端）
// 注意：只返回已通过审核且无待审核修改的题目的正式内容
export function listApprovedTopic(query) {
  return request({
    url: '/system/topic/approved',
    method: 'get',
    params: query
  })
}

// 查询题目详情（学生端）
// 注意：只能查看已通过审核的题目，返回的是正式内容（不包含pending字段）
export function getTopicDetail(topicId) {
  return request({
    url: '/system/topic/detail/' + topicId,
    method: 'get'
  })
}